1. Field of the Invention
The present invention relates to a computer program product, system, and method to allocate a segment of a buffer to each of a plurality of threads to use for writing data.
2. Description of the Related Art
Multiple threads executing a program may generate trace data having information on program execution which is written to a shared circular buffer. Trace data may be collected when an error is detected or may be collected as a result of trace code added to programs to collect certain information on program execution, such as the contents of memory and variables, resulting from program execution. Trace data may be used for debugging errors in the program code.
When writing the trace data to the shared circular buffer, the threads need to acquire a lock to access the shared circular buffer to serialize access. To minimize lock contention, task operations may be optimized to just perform critical operations such as claiming the amount of space currently needed and not using that space until after the lock has been relinquished. In this way, lock contention is reduced by reducing the number of tasks subject to lock contention.
Another technique to minimize lock contention involves splitting the buffer into as many circular sub-buffers as there are threads. In this case, no lock is required as each thread has its own sub-buffer.
A further solution is to put the threads into small groups and divide the total buffer into as many sub-buffers as there are groups. One lock is provided per sub-buffer but the number of group members being small enough, efficient use of locking will lessen the collision and thus the wait suffered.